5.05. Ключевые слова в C#
Ключевые слова в C#
Управление потоком выполнения
| Ключевое слово | Назначение | Пример |
|---|---|---|
if | Условное выполнение блока кода при истинности выражения | if (count > 0) Process(); |
else | Альтернативное выполнение при ложности условия if | if (valid) Accept(); else Reject(); |
switch | Множественный выбор на основе значения выражения | switch (status) { case 1: ... } |
case | Метка варианта в конструкции switch | case ConnectionState.Open: |
default | Обработчик значений по умолчанию в switch | default: HandleUnknown(); |
break | Прерывание выполнения цикла или секции switch | if (found) break; |
continue | Переход к следующей итерации цикла | if (skip) continue; |
goto | Безусловный переход к метке | goto retry; |
return | Возврат значения из метода и завершение его выполнения | return result; |
yield | Возврат элемента последовательности в итераторе | yield return item; |
Циклы
| Ключевое слово | Назначение | Пример |
|---|---|---|
for | Цикл с инициализацией, условием и шагом | for (int i = 0; i < 10; i++) { ... } |
foreach | Итерация по элементам коллекции | foreach (var item in list) { ... } |
while | Цикл с проверкой условия перед итерацией | while (active) { ... } |
do | Цикл с проверкой условия после итерации | do { ... } while (retry); |
Обработка исключений
| Ключевое слово | Назначение | Пример |
|---|---|---|
try | Блок кода с потенциальными исключениями | try { Operation(); } |
catch | Обработчик перехваченного исключения | catch (IOException ex) { ... } |
finally | Блок гарантированного выполнения после try | finally { Cleanup(); } |
throw | Генерация исключения | throw new ArgumentException(); |
Типы и члены
| Ключевое слово | Назначение | Пример |
|---|---|---|
class | Объявление ссылочного типа | class Customer { } |
struct | Объявление типа значения | struct Point { } |
interface | Объявление контракта для типов | interface ILogger { void Log(); } |
enum | Объявление перечисления | enum Status { Active, Inactive } |
record | Объявление неизменяемого типа данных | record Person(string Name); |
delegate | Объявление типа делегата | delegate void Handler(); |
event | Объявление события | event EventHandler Changed; |
namespace | Организация кода в иерархию имён | namespace MyApp.Data { } |
using | Импорт пространства имён или управление ресурсами | using var file = Open(); |
Модификаторы доступа
| Ключевое слово | Назначение | Пример |
|---|---|---|
public | Доступ из любого кода | public int Id { get; } |
private | Доступ только внутри содержащего типа | private string secret; |
protected | Доступ внутри типа и его наследников | protected void Init() { } |
internal | Доступ внутри сборки | internal class Helper { } |
protected internal | Доступ внутри сборки или из наследников | protected internal void Share() { } |
private protected | Доступ из наследников внутри сборки | private protected void Limited() { } |
Модификаторы членов
| Ключевое слово | Назначение | Пример |
|---|---|---|
static | Принадлежность члена типу, а не экземпляру | static int Counter; |
readonly | Неизменяемость поля после инициализации | readonly DateTime created; |
const | Компиляционная константа | const double Pi = 3.14159; |
sealed | Запрет наследования класса или переопределения метода | sealed class Utility { } |
abstract | Объявление нереализованного члена для наследников | abstract void Execute(); |
virtual | Разрешение переопределения метода в наследниках | virtual void Render() { } |
override | Переопределение виртуального члена базового типа | override void Render() { } |
new | Сокрытие члена базового типа | new void Log() { } |
partial | Разделение объявления типа на несколько файлов | partial class Generator { } |
async | Объявление асинхронного метода | async Task LoadAsync() { } |
unsafe | Разрешение небезопасного кода с указателями | unsafe void Copy(byte* src) { } |
Параметры и аргументы
| Ключевое слово | Назначение | Пример |
|---|---|---|
params | Передача переменного числа аргументов | void Log(params string[] messages) |
ref | Передача аргумента по ссылке | Swap(ref a, ref b); |
out | Выходной параметр для возврата значения | bool TryParse(string s, out int result) |
in | Передача аргумента по ссылке только для чтения | void Process(in Data item) |
this | Ссылка на текущий экземпляр | return this.Id; |
base | Доступ к членам базового типа | base.Initialize(); |
Операторы и выражения
| Ключевое слово | Назначение | Пример |
|---|---|---|
is | Проверка совместимости типов или сопоставление с образцом | if (obj is string s) { ... } |
as | Безопасное приведение типов | var text = obj as string; |
typeof | Получение объекта System.Type для типа | Type t = typeof(Customer); |
sizeof | Определение размера типа значения в байтах | int size = sizeof(int); |
checked | Проверка переполнения в арифметических операциях | checked { sum = a + b; } |
unchecked | Отключение проверки переполнения | unchecked { hash = x * 31 + y; } |
stackalloc | Выделение памяти в стеке | Span<int> buffer = stackalloc int[100]; |
true | Перегрузка логического оператора | public static bool operator true(Box b) |
false | Перегрузка логического оператора | public static bool operator false(Box b) |
operator | Перегрузка операторов или преобразований | public static Box operator +(Box a, Box b) |
implicit | Объявление неявного преобразования типов | public static implicit operator string(Id id) |
explicit | Объявление явного преобразования типов | public static explicit operator Id(string s) |
Контекстные ключевые слова
| Ключевое слово | Назначение | Пример |
|---|---|---|
var | Вывод типа переменной компилятором | var list = new List<int>(); |
dynamic | Отложенная проверка типов до времени выполнения | dynamic obj = GetObject(); |
nameof | Получение имени символа в виде строки | throw new ArgumentNullException(nameof(value)); |
when | Дополнительное условие в фильтре исключений или сопоставлении с образцом | catch (Exception ex) when (ex.HResult == 0x80070005) |
global | Явное указание глобального пространства имён | global::System.Console.WriteLine(); |
value | Значение свойства в аксессорах | set { _field = value; } |
get | Аксессор чтения свойства или индексатора | get { return _value; } |
set | Аксессор записи свойства или индексатора | set { _value = value; } |
init | Аксессор инициализации свойства только при создании | public string Name { get; init; } |
add | Аксессор добавления обработчика события | add { _handlers += value; } |
remove | Аксессор удаления обработчика события | remove { _handlers -= value; } |
where | Ограничение универсального параметра типа | where T : class |
alias | Создание псевдонима для типа в директиве extern | extern alias Legacy; |
ascending | Сортировка по возрастанию в запросах | orderby x ascending |
descending | Сортировка по убыванию в запросах | orderby x descending |
add | Аксессор добавления обработчика события | add { _handlers += value; } |
raise | Устаревший аксессор события в C++/CLI | — |
module | Объявление модуля в C++/CLI | — |
property | Объявление свойства в C++/CLI | — |
assembly | Указание уровня доступа на уровне сборки | [assembly: InternalsVisibleTo("Test")] |
type | Указание типа в атрибутах | [type: Obsolete] |
method | Указание метода в атрибутах | [method: STAThread] |
field | Указание поля в атрибутах | [field: NonSerialized] |
event | Указание события в атрибутах | [event: FieldNotUsed] |
param | Указание параметра в атрибутах | [param: MarshalAs(UnmanagedType.LPStr)] |
property | Указание свойства в атрибутах | [property: DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] |
return | Указание возвращаемого значения в атрибутах | [return: MarshalAs(UnmanagedType.Bool)] |
Логические операторы
| Ключевое слово | Назначение | Пример |
|---|---|---|
and | Логическое И в выражениях сопоставления с образцом | if (x is > 0 and < 100) { } |
or | Логическое ИЛИ в выражениях сопоставления с образцом | if (status is Ready or Completed) { } |
not | Логическое НЕ в выражениях сопоставления с образцом | if (x is not null) { } |
Асинхронное программирование
| Ключевое слово | Назначение | Пример |
|---|---|---|
await | Ожидание завершения асинхронной операции | var result = await FetchAsync(); |
lock | Блокировка объекта для синхронизации потоков | lock (_sync) { Update(); } |
volatile | Указание на переменную, доступную из нескольких потоков | volatile bool flag; |
LINQ и запросы
| Ключевое слово | Назначение | Пример |
|---|---|---|
from | Начало выражения запроса | from item in collection |
where | Фильтрация элементов в запросе | where item.Price > 100 |
select | Проекция результатов запроса | select item.Name |
group | Группировка элементов в запросе | group item by item.Category |
into | Хранение промежуточного результата запроса | group item by item.Category into g |
orderby | Сортировка элементов в запросе | orderby item.Name ascending |
join | Соединение двух последовательностей | join order in orders on customer.Id equals order.CustomerId |
let | Введение переменной в выражение запроса | let total = item.Price * item.Quantity |
on | Указание ключей соединения в join | on x.Key equals y.Key |
equals | Оператор сравнения в join | on customer.Id equals order.CustomerId |
by | Указание ключа группировки в group | group item by item.Category |
ascending | Сортировка по возрастанию | orderby item.Price ascending |
descending | Сортировка по убыванию | orderby item.Price descending |
Управление памятью
| Ключевое слово | Назначение | Пример |
|---|---|---|
fixed | Закрепление объекта в памяти для указателей | fixed (char* p = str) { } |
null | Литерал, представляющий отсутствие ссылки | string s = null; |
null! | Подавление предупреждения о возможном значении null | return GetValue()!; |